Factor Model Estimator

Factor Model Estimator#

Factor Model impose a structure on asset’s covariance matrix by using factors to explain their relationships.

  • Reduce the dimensionality of estimation.

  • Robust against noise

  • Decompose risk into systematic and idiosyncratic components

Data#

Use 5 ETF’s daily prices as common factors.

from plotly.io import show
from sklearn.linear_model import RidgeCV
from sklearn.model_selection import train_test_split

from skfolio import Population, RiskMeasure
from skfolio.datasets import load_factors_dataset, load_sp500_dataset
from skfolio.moments import GerberCovariance, ShrunkMu
from skfolio.optimization import MeanRisk, ObjectiveFunction
from skfolio.preprocessing import prices_to_returns
from skfolio.prior import EmpiricalPrior, FactorModel, LoadingMatrixRegression

prices = load_sp500_dataset()
factor_prices = load_factors_dataset()

X, y = prices_to_returns(prices, factor_prices)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, shuffle=False)
X_train.head()
AAPL AMD BAC BBY CVX GE HD JNJ JPM KO LLY MRK MSFT PEP PFE PG RRC UNH WMT XOM
Date
2014-01-03 -0.021941 0.012658 0.019298 0.004423 0.001694 -0.000724 -0.001591 0.009005 0.007727 -0.004921 0.007290 0.004831 -0.006747 0.001696 0.001976 -0.001119 -0.014801 0.007104 -0.003300 -0.002409
2014-01-06 0.005417 0.032500 0.015233 -0.031223 -0.002663 -0.008007 -0.009639 0.005223 0.005801 -0.004678 0.008424 0.000198 -0.021116 0.000495 0.000986 0.002372 0.006461 -0.011444 -0.005591 0.001503
2014-01-07 -0.007145 0.012107 -0.009646 -0.026135 0.008466 0.001096 0.004920 0.021230 -0.011535 0.002954 -0.006601 0.007464 0.007758 0.014579 0.006206 0.009661 0.017028 0.030569 0.003078 0.014147
2014-01-08 0.006311 0.000000 0.004834 -0.014072 -0.014226 -0.002926 0.005277 -0.001371 0.009434 -0.011147 -0.001571 -0.006399 -0.017865 -0.002880 0.006853 -0.014483 0.001090 -0.011626 -0.007907 -0.003259
2014-01-09 -0.012719 -0.021531 0.015078 -0.008176 0.000000 0.000366 -0.004385 0.006056 -0.001860 -0.005247 0.011157 -0.005423 -0.006449 -0.004688 -0.000681 0.002246 -0.015635 0.006088 0.003346 -0.009735
y_train.head()
MTUM QUAL SIZE USMV VLUE
Date
2014-01-03 0.001670 -0.001965 -0.005389 -0.000273 -0.001169
2014-01-06 -0.002178 -0.003917 0.000000 -0.002284 -0.000170
2014-01-07 0.008258 0.008072 0.000185 0.005707 0.005576
2014-01-08 0.007343 -0.000371 0.000000 -0.000272 0.000000
2014-01-09 0.001832 -0.000537 -0.002093 0.001428 -0.002180

Model#

max_sharpe_model_factor_1 = MeanRisk(
    risk_measure=RiskMeasure.VARIANCE,
    objective_function=ObjectiveFunction.MAXIMIZE_RATIO,
    prior_estimator=FactorModel(),
    portfolio_params=dict(name="Factor Model 1")
)
max_sharpe_model_factor_1.fit(X_train, y_train)
max_sharpe_model_factor_1.weights_
array([1.03294289e-06, 1.27482685e-03, 4.19682803e-07, 3.34130825e-06,
       7.36838286e-07, 1.28824408e-06, 5.13031432e-02, 6.35619183e-02,
       6.14804833e-07, 1.79106051e-01, 5.03130911e-02, 7.13734379e-02,
       4.13002526e-02, 2.27978407e-01, 5.13348034e-02, 1.44130375e-01,
       2.99026116e-07, 6.19737850e-02, 5.63413085e-02, 8.67773196e-07])
max_sharpe_model_factor_2 = MeanRisk(
    risk_measure=RiskMeasure.VARIANCE,
    objective_function=ObjectiveFunction.MAXIMIZE_RATIO,
    prior_estimator=FactorModel(
        loading_matrix_estimator=LoadingMatrixRegression(
            linear_regressor=RidgeCV(fit_intercept=False), n_jobs=-1
        )
    ),
    portfolio_params=dict(name="Factor Model 2")
)
max_sharpe_model_factor_2.fit(X_train, y_train)
max_sharpe_model_factor_2.weights_
array([3.97758339e-02, 6.57843874e-03, 2.18405141e-02, 8.98258882e-03,
       3.16197378e-02, 1.42391168e-02, 8.00124906e-02, 8.32090802e-02,
       4.74782930e-02, 8.59470407e-02, 4.59776221e-02, 5.91778878e-02,
       8.42236770e-02, 1.05684777e-01, 6.43841778e-02, 7.94729901e-02,
       3.76786711e-05, 5.23695742e-02, 4.35215146e-02, 4.54669667e-02])

Empirical prior estimator of factors.

max_sharpe_model_factor_3 = MeanRisk(
    risk_measure=RiskMeasure.VARIANCE,
    objective_function=ObjectiveFunction.MAXIMIZE_RATIO,
    prior_estimator=FactorModel(
        factor_prior_estimator=EmpiricalPrior(
            mu_estimator=ShrunkMu(), covariance_estimator=GerberCovariance()
        )
    ),
    portfolio_params=dict(name="Factor Model 3")
)
max_sharpe_model_factor_3.fit(X_train, y_train)
max_sharpe_model_factor_3.weights_
array([4.86490688e-07, 4.38230191e-07, 4.24408219e-08, 6.69653310e-08,
       5.11878211e-08, 6.14581598e-08, 1.68436387e-02, 2.08439608e-06,
       5.27854151e-08, 6.45513596e-02, 6.24004728e-02, 9.61498232e-02,
       3.68209826e-01, 2.44692220e-01, 5.86512134e-07, 9.30385158e-06,
       2.19939734e-08, 1.47139096e-01, 3.09340377e-07, 5.81316429e-08])
prior_estimator = max_sharpe_model_factor_3.prior_estimator_
prior_estimator
FactorModel(factor_prior_estimator=EmpiricalPrior(covariance_estimator=GerberCovariance(),
                                                  mu_estimator=ShrunkMu()))
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
prior_model = prior_estimator.prior_model_
prior_model
PriorModel(mu=array([ 0.00059752,  0.00078836, -0.00053323, -0.00012697, -0.00033297,
       -0.00021685,  0.00061879,  0.00054947, -0.00029846,  0.00050157,
        0.00068264,  0.00069036,  0.00125097,  0.00065547,  0.00045871,
        0.00049221, -0.00175945,  0.00081062,  0.00033362, -0.00023231]), covariance=array([[ 2.75022074e-04,  1.29310397e-04,  1.14094740e-04,
         6.75191637e-05,  7.20639440e-05,  7.33237546e-05,
         6.16476554e-05,  4.68291134e-05,  9.48837814e-05,
        -5.26599038e-06,  3.48607146e-05,  3.01473788e-05,
         1.15046221e-04,  1.40148901e-07,  3.44889698e-05,
         8.52261680e-07,  1.05781045e-04,  2.90934542e-05,
         3.88259728e-06,  7.75978321e-05],
       [ 1.29310397e-04,  1.45566967e-03,  1.55981389e-04,
         1.10954429e-04,  7.64768830e-05,  8.67241392e-05,
         8.08813989e-05,  3.05345368e-05,  1.21105046e-04,
        -4.89395055e-06,  4.82541428e-05,  4.51634980e-05,
         1.27995691e-04, -4.55732351e-06,  5.66555704e-05,
        -4.09562521e-06,  1.42304632e-04,  8.63190912e-05,
         2.37363066e-05,  5.57555261e-05],
       [ 1.14094740e-04,  1.55981389e-04,  2.69090256e-04,
         1.01689654e-04,  9.49504435e-05,  9.35432817e-05,
         5.78640096e-05,  2.91954895e-05,  1.24269576e-04,
        -9.08347887e-06,  2.85402761e-05,  2.47993513e-05,
         8.38345197e-05, -1.06712866e-05,  4.09363935e-05,
        -4.57836762e-06,  1.84647624e-04,  4.28713997e-05,
         1.66612855e-05,  8.13387650e-05],
       [ 6.75191637e-05,  1.10954429e-04,  1.01689654e-04,
         5.21322344e-04,  7.08593403e-05,  6.81915115e-05,
         4.94184022e-05,  3.16221718e-05,  8.53304343e-05,
         1.60443423e-05,  3.53552203e-05,  3.36832304e-05,
         6.01253120e-05,  1.57659995e-05,  4.20884042e-05,
         1.87708673e-05,  1.18332703e-04,  4.69483904e-05,
         3.17546971e-05,  5.96513909e-05],
       [ 7.20639440e-05,  7.64768830e-05,  9.49504435e-05,
         7.08593403e-05,  1.90825444e-04,  7.36024262e-05,
         4.80112810e-05,  4.65744597e-05,  8.59258701e-05,
         2.74723752e-05,  3.80836430e-05,  3.59814776e-05,
         5.52114817e-05,  2.92016372e-05,  4.28462937e-05,
         3.32346073e-05,  1.20270398e-04,  3.22112357e-05,
         3.69812877e-05,  8.06298282e-05],
       [ 7.33237546e-05,  8.67241392e-05,  9.35432817e-05,
         6.81915115e-05,  7.36024262e-05,  3.06004528e-04,
         4.61879786e-05,  3.84574483e-05,  8.15190862e-05,
         1.86642816e-05,  3.38999830e-05,  3.17542249e-05,
         5.74139807e-05,  1.97327963e-05,  3.81902046e-05,
         2.29821149e-05,  1.14392836e-04,  3.26251338e-05,
         2.89936200e-05,  6.96063575e-05],
       [ 6.16476554e-05,  8.08813989e-05,  5.78640096e-05,
         4.94184022e-05,  4.80112810e-05,  4.61879786e-05,
         1.21041183e-04,  3.94231192e-05,  5.40731034e-05,
         2.66659333e-05,  4.02859024e-05,  3.90848323e-05,
         6.54442932e-05,  3.02615048e-05,  3.91432709e-05,
         2.93555944e-05,  4.96897755e-05,  4.33380200e-05,
         3.12123954e-05,  4.59021175e-05],
       [ 4.68291134e-05,  3.05345368e-05,  2.91954895e-05,
         3.16221718e-05,  4.65744597e-05,  3.84574483e-05,
         3.94231192e-05,  1.08304653e-04,  3.71734414e-05,
         4.18030338e-05,  4.14191985e-05,  4.05650429e-05,
         4.93432671e-05,  4.73678463e-05,  3.65906540e-05,
         4.62952095e-05,  2.45801578e-05,  2.81081500e-05,
         3.71767797e-05,  5.28333969e-05],
       [ 9.48837814e-05,  1.21105046e-04,  1.24269576e-04,
         8.53304343e-05,  8.59258701e-05,  8.15190862e-05,
         5.40731034e-05,  3.71734414e-05,  1.70717343e-04,
         8.07713480e-06,  3.39471416e-05,  3.10414132e-05,
         7.34839631e-05,  8.39736851e-06,  4.19903070e-05,
         1.28630070e-05,  1.46159436e-04,  4.00187093e-05,
         2.57013528e-05,  7.74224660e-05],
       [-5.26599038e-06, -4.89395055e-06, -9.08347887e-06,
         1.60443423e-05,  2.74723752e-05,  1.86642816e-05,
         2.66659333e-05,  4.18030338e-05,  8.07713480e-06,
         1.05253169e-04,  4.06544494e-05,  4.18397599e-05,
         1.49114467e-05,  6.14701296e-05,  3.46402138e-05,
         5.93790744e-05, -1.13617568e-05,  3.05904270e-05,
         4.86306807e-05,  3.06495654e-05],
       [ 3.48607146e-05,  4.82541428e-05,  2.85402761e-05,
         3.53552203e-05,  3.80836430e-05,  3.38999830e-05,
         4.02859024e-05,  4.14191985e-05,  3.39471416e-05,
         4.06544494e-05,  1.75693820e-04,  4.21282005e-05,
         4.77174524e-05,  4.48074434e-05,  3.85539582e-05,
         4.29237546e-05,  1.92926406e-05,  4.08145780e-05,
         3.93913623e-05,  3.81468082e-05],
       [ 3.01473788e-05,  4.51634980e-05,  2.47993513e-05,
         3.36832304e-05,  3.59814776e-05,  3.17542249e-05,
         3.90848323e-05,  4.05650429e-05,  3.10414132e-05,
         4.18397599e-05,  4.21282005e-05,  1.42043162e-04,
         4.48571748e-05,  4.59019476e-05,  3.83176610e-05,
         4.38899693e-05,  1.51241945e-05,  4.11898710e-05,
         4.02710437e-05,  3.57024723e-05],
       [ 1.15046221e-04,  1.27995691e-04,  8.38345197e-05,
         6.01253120e-05,  5.52114817e-05,  5.74139807e-05,
         6.54442932e-05,  4.93432671e-05,  7.34839631e-05,
         1.49114467e-05,  4.77174524e-05,  4.48571748e-05,
         2.02142203e-04,  2.15162449e-05,  4.49078328e-05,
         1.90049852e-05,  5.37436081e-05,  5.30950647e-05,
         2.18979823e-05,  5.59398694e-05],
       [ 1.40148901e-07, -4.55732351e-06, -1.06712866e-05,
         1.57659995e-05,  2.92016372e-05,  1.97327963e-05,
         3.02615048e-05,  4.73678463e-05,  8.39736851e-06,
         6.14701296e-05,  4.48074434e-05,  4.59019476e-05,
         2.15162449e-05,  1.07625755e-04,  3.75343952e-05,
         6.40286709e-05, -1.72798120e-05,  3.26763167e-05,
         5.12581307e-05,  3.40666183e-05],
       [ 3.44889698e-05,  5.66555704e-05,  4.09363935e-05,
         4.20884042e-05,  4.28462937e-05,  3.81902046e-05,
         3.91432709e-05,  3.65906540e-05,  4.19903070e-05,
         3.46402138e-05,  3.85539582e-05,  3.83176610e-05,
         4.49078328e-05,  3.75343952e-05,  1.15877589e-04,
         3.69584016e-05,  3.68692997e-05,  4.17271572e-05,
         3.79004402e-05,  3.90792631e-05],
       [ 8.52261680e-07, -4.09562521e-06, -4.57836762e-06,
         1.87708673e-05,  3.32346073e-05,  2.29821149e-05,
         2.93555944e-05,  4.62952095e-05,  1.28630070e-05,
         5.93790744e-05,  4.29237546e-05,  4.38899693e-05,
         1.90049852e-05,  6.40286709e-05,  3.69584016e-05,
         1.15957585e-04, -6.14105349e-06,  3.06567550e-05,
         5.05747377e-05,  3.73325252e-05],
       [ 1.05781045e-04,  1.42304632e-04,  1.84647624e-04,
         1.18332703e-04,  1.20270398e-04,  1.14392836e-04,
         4.96897755e-05,  2.45801578e-05,  1.46159436e-04,
        -1.13617568e-05,  1.92926406e-05,  1.51241945e-05,
         5.37436081e-05, -1.72798120e-05,  3.68692997e-05,
        -6.14105349e-06,  1.13240765e-03,  2.49017180e-05,
         1.78092500e-05,  1.05120734e-04],
       [ 2.90934542e-05,  8.63190912e-05,  4.28713997e-05,
         4.69483904e-05,  3.22112357e-05,  3.26251338e-05,
         4.33380200e-05,  2.81081500e-05,  4.00187093e-05,
         3.05904270e-05,  4.08145780e-05,  4.11898710e-05,
         5.30950647e-05,  3.26763167e-05,  4.17271572e-05,
         3.06567550e-05,  2.49017180e-05,  1.76762783e-04,
         3.88397853e-05,  2.09515222e-05],
       [ 3.88259728e-06,  2.37363066e-05,  1.66612855e-05,
         3.17546971e-05,  3.69812877e-05,  2.89936200e-05,
         3.12123954e-05,  3.71767797e-05,  2.57013528e-05,
         4.86306807e-05,  3.93913623e-05,  4.02710437e-05,
         2.18979823e-05,  5.12581307e-05,  3.79004402e-05,
         5.05747377e-05,  1.78092500e-05,  3.88397853e-05,
         1.49113824e-04,  3.37187088e-05],
       [ 7.75978321e-05,  5.57555261e-05,  8.13387650e-05,
         5.96513909e-05,  8.06298282e-05,  6.96063575e-05,
         4.59021175e-05,  5.28333969e-05,  7.74224660e-05,
         3.06495654e-05,  3.81468082e-05,  3.57024723e-05,
         5.59398694e-05,  3.40666183e-05,  3.90792631e-05,
         3.73325252e-05,  1.05120734e-04,  2.09515222e-05,
         3.37187088e-05,  1.59523910e-04]]), returns=array([[-0.00199817, -0.00042477, -0.00237797, ...,  0.00139911,
        -0.00020712, -0.00320953],
       [-0.00472448, -0.00080819, -0.00096952, ..., -0.00095927,
        -0.00169727, -0.00375446],
       [ 0.01005251,  0.01010583,  0.00749449, ...,  0.00651126,
         0.00495531,  0.00725569],
       ...,
       [ 0.00601832,  0.00745974,  0.00385279, ...,  0.00294314,
         0.00077309,  0.00209029],
       [ 0.0095716 ,  0.00791312,  0.00261701, ...,  0.00535552,
         0.00408997,  0.00540137],
       [-0.00155016, -0.00451996, -0.00553801, ..., -0.001108  ,
        -0.00101758, -0.00272778]]), cholesky=array([[ 0.0076512 ,  0.00791537, -0.00124936, -0.00473785,  0.        ,
         0.01139386,  0.        ,  0.        ,  0.        ,  0.        ,
         0.        ,  0.        ,  0.        ,  0.        ,  0.        ,
         0.        ,  0.        ,  0.        ,  0.        ,  0.        ,
         0.        ,  0.        ,  0.        ,  0.        ,  0.        ],
       [ 0.01267863,  0.00230907,  0.0028551 , -0.00371341,  0.00608266,
         0.        ,  0.03508063,  0.        ,  0.        ,  0.        ,
         0.        ,  0.        ,  0.        ,  0.        ,  0.        ,
         0.        ,  0.        ,  0.        ,  0.        ,  0.        ,
         0.        ,  0.        ,  0.        ,  0.        ,  0.        ],
       [ 0.00584882,  0.00659974,  0.00153833, -0.00401594,  0.00777328,
         0.        ,  0.        ,  0.01060222,  0.        ,  0.        ,
         0.        ,  0.        ,  0.        ,  0.        ,  0.        ,
         0.        ,  0.        ,  0.        ,  0.        ,  0.        ,
         0.        ,  0.        ,  0.        ,  0.        ,  0.        ],
       [ 0.00493489,  0.00423128,  0.00218133,  0.00021223,  0.00545429,
         0.        ,  0.        ,  0.        ,  0.02108348,  0.        ,
         0.        ,  0.        ,  0.        ,  0.        ,  0.        ,
         0.        ,  0.        ,  0.        ,  0.        ,  0.        ,
         0.        ,  0.        ,  0.        ,  0.        ,  0.        ],
       [ 0.00282127,  0.00729264,  0.00056355,  0.00138079,  0.00450236,
         0.        ,  0.        ,  0.        ,  0.        ,  0.01035316,
         0.        ,  0.        ,  0.        ,  0.        ,  0.        ,
         0.        ,  0.        ,  0.        ,  0.        ,  0.        ,
         0.        ,  0.        ,  0.        ,  0.        ,  0.        ],
       [ 0.00355227,  0.00615007,  0.00144922,  0.00015299,  0.00393178,
         0.        ,  0.        ,  0.        ,  0.        ,  0.        ,
         0.0154266 ,  0.        ,  0.        ,  0.        ,  0.        ,
         0.        ,  0.        ,  0.        ,  0.        ,  0.        ,
         0.        ,  0.        ,  0.        ,  0.        ,  0.        ],
       [ 0.00559007,  0.00344247,  0.00063832,  0.00159862,  0.00101467,
         0.        ,  0.        ,  0.        ,  0.        ,  0.        ,
         0.        ,  0.00859937,  0.        ,  0.        ,  0.        ,
         0.        ,  0.        ,  0.        ,  0.        ,  0.        ,
         0.        ,  0.        ,  0.        ,  0.        ,  0.        ],
       [ 0.00311079,  0.00503293, -0.00062074,  0.00371165, -0.00081746,
         0.        ,  0.        ,  0.        ,  0.        ,  0.        ,
         0.        ,  0.        ,  0.00764639,  0.        ,  0.        ,
         0.        ,  0.        ,  0.        ,  0.        ,  0.        ,
         0.        ,  0.        ,  0.        ,  0.        ,  0.        ],
       [ 0.00492347,  0.00650322,  0.00102714, -0.00148195,  0.0057919 ,
         0.        ,  0.        ,  0.        ,  0.        ,  0.        ,
         0.        ,  0.        ,  0.        ,  0.008209  ,  0.        ,
         0.        ,  0.        ,  0.        ,  0.        ,  0.        ,
         0.        ,  0.        ,  0.        ,  0.        ,  0.        ],
       [ 0.00137125,  0.00233393,  0.00105064,  0.00694809, -0.0008002 ,
         0.        ,  0.        ,  0.        ,  0.        ,  0.        ,
         0.        ,  0.        ,  0.        ,  0.        ,  0.00692138,
         0.        ,  0.        ,  0.        ,  0.        ,  0.        ,
         0.        ,  0.        ,  0.        ,  0.        ,  0.        ],
       [ 0.00428975,  0.00275223,  0.00077908,  0.00396225,  0.        ,
         0.        ,  0.        ,  0.        ,  0.        ,  0.        ,
         0.        ,  0.        ,  0.        ,  0.        ,  0.        ,
         0.01155036,  0.        ,  0.        ,  0.        ,  0.        ,
         0.        ,  0.        ,  0.        ,  0.        ,  0.        ],
       [ 0.0041721 ,  0.00245088,  0.00083541,  0.00424877,  0.        ,
         0.        ,  0.        ,  0.        ,  0.        ,  0.        ,
         0.        ,  0.        ,  0.        ,  0.        ,  0.        ,
         0.        ,  0.009994  ,  0.        ,  0.        ,  0.        ,
         0.        ,  0.        ,  0.        ,  0.        ,  0.        ],
       [ 0.00948544,  0.00450157, -0.00134661, -0.00108852, -0.00046996,
         0.        ,  0.        ,  0.        ,  0.        ,  0.        ,
         0.        ,  0.        ,  0.        ,  0.        ,  0.        ,
         0.        ,  0.        ,  0.00941729,  0.        ,  0.        ,
         0.        ,  0.        ,  0.        ,  0.        ,  0.        ],
       [ 0.00182792,  0.00272511,  0.00057269,  0.00732407, -0.00139136,
         0.        ,  0.        ,  0.        ,  0.        ,  0.        ,
         0.        ,  0.        ,  0.        ,  0.        ,  0.        ,
         0.        ,  0.        ,  0.        ,  0.0063994 ,  0.        ,
         0.        ,  0.        ,  0.        ,  0.        ,  0.        ],
       [ 0.00407386,  0.00256053,  0.00053825,  0.00343532,  0.00169533,
         0.        ,  0.        ,  0.        ,  0.        ,  0.        ,
         0.        ,  0.        ,  0.        ,  0.        ,  0.        ,
         0.        ,  0.        ,  0.        ,  0.        ,  0.00881814,
         0.        ,  0.        ,  0.        ,  0.        ,  0.        ],
       [ 0.00140164,  0.00307377,  0.00057097,  0.00706833, -0.0007146 ,
         0.        ,  0.        ,  0.        ,  0.        ,  0.        ,
         0.        ,  0.        ,  0.        ,  0.        ,  0.        ,
         0.        ,  0.        ,  0.        ,  0.        ,  0.        ,
         0.00733123,  0.        ,  0.        ,  0.        ,  0.        ],
       [ 0.00180274,  0.00957744,  0.00477689, -0.0046745 ,  0.01090585,
         0.        ,  0.        ,  0.        ,  0.        ,  0.        ,
         0.        ,  0.        ,  0.        ,  0.        ,  0.        ,
         0.        ,  0.        ,  0.        ,  0.        ,  0.        ,
         0.        ,  0.0295605 ,  0.        ,  0.        ,  0.        ],
       [ 0.00641985, -0.00034107,  0.00103944,  0.00338291,  0.00251636,
         0.        ,  0.        ,  0.        ,  0.        ,  0.        ,
         0.        ,  0.        ,  0.        ,  0.        ,  0.        ,
         0.        ,  0.        ,  0.        ,  0.        ,  0.        ,
         0.        ,  0.        ,  0.01079701,  0.        ,  0.        ],
       [ 0.00225012,  0.00201069,  0.00096232,  0.00591969,  0.00161108,
         0.        ,  0.        ,  0.        ,  0.        ,  0.        ,
         0.        ,  0.        ,  0.        ,  0.        ,  0.        ,
         0.        ,  0.        ,  0.        ,  0.        ,  0.        ,
         0.        ,  0.        ,  0.        ,  0.01007192,  0.        ],
       [ 0.00210995,  0.00859385,  0.00018985,  0.00133649,  0.00223279,
         0.        ,  0.        ,  0.        ,  0.        ,  0.        ,
         0.        ,  0.        ,  0.        ,  0.        ,  0.        ,
         0.        ,  0.        ,  0.        ,  0.        ,  0.        ,
         0.        ,  0.        ,  0.        ,  0.        ,  0.00862613]]))
loading_matrix = prior_estimator.loading_matrix_estimator_.loading_matrix_
loading_matrix
array([[ 0.34905954,  1.59051502, -0.05077361, -0.99167193, -0.        ],
       [ 1.16592858,  0.        ,  0.28177423, -0.82678691,  0.92261137],
       [ 0.06342149,  0.68820926, -0.        , -0.90387695,  1.17904377],
       [ 0.        ,  0.19084808,  0.08086552, -0.        ,  0.82730174],
       [-0.51036765,  0.78697298, -0.16877212,  0.25234305,  0.6829133 ],
       [-0.28101136,  0.64151033,  0.03860762, -0.        ,  0.59636878],
       [ 0.17691041,  0.36515599,  0.00321386,  0.32634051,  0.15390387],
       [-0.278366  ,  0.70692514, -0.17666442,  0.78353708, -0.12399197],
       [-0.10659571,  0.69754112, -0.06647323, -0.35735584,  0.8785099 ],
       [-0.41056254, -0.00260142, -0.01212348,  1.46081088, -0.12137341],
       [ 0.        ,  0.18620599, -0.        ,  0.82933288, -0.        ],
       [-0.        ,  0.11966633,  0.        ,  0.88930418,  0.        ],
       [ 0.69202998,  0.89393433, -0.15846805, -0.22400802, -0.07128371],
       [-0.3957795 ,  0.10853663, -0.07201061,  1.54432198, -0.21104045],
       [ 0.        ,  0.09651092, -0.10304305,  0.70523413,  0.25714621],
       [-0.47097164,  0.13667695, -0.09663336,  1.48528068, -0.10839054],
       [-0.73003654,  0.79154733,  0.38823075, -1.0672316 ,  1.65418823],
       [ 0.49477073, -0.44787587, -0.06060629,  0.68757756,  0.38167972],
       [-0.27169002, -0.14117267, -0.1093039 ,  1.22591944,  0.2443677 ],
       [-0.66103932,  1.15899118, -0.1184898 ,  0.2615538 ,  0.33866742]])
benchmark_model = MeanRisk(
    risk_measure=RiskMeasure.VARIANCE,
    objective_function=ObjectiveFunction.MAXIMIZE_RATIO,
    portfolio_params=dict(name="Empirical")
)
benchmark_model.fit(X_train)
benchmark_model.weights_
array([1.01561518e-01, 7.81165193e-02, 6.29030036e-07, 1.89005488e-02,
       3.05610119e-07, 1.55770502e-07, 1.10594710e-01, 1.22328443e-06,
       1.56471742e-06, 3.39453276e-06, 1.62631058e-01, 1.92171374e-06,
       1.77783711e-01, 9.61805760e-02, 4.64493062e-07, 9.68566446e-03,
       7.41771352e-08, 2.44533886e-01, 1.83984287e-06, 2.34178301e-07])

Prediction#

pred_factor_1 = max_sharpe_model_factor_1.predict(X_test)
pred_factor_2 = max_sharpe_model_factor_2.predict(X_test)
pred_factor_3 = max_sharpe_model_factor_3.predict(X_test)
pred_benchmark = benchmark_model.predict(X_test)

Analysis#

population = Population(
    [
        pred_factor_1,
        pred_factor_2,
        pred_factor_3,
        pred_benchmark
    ]
)
population.plot_cumulative_returns()
population.plot_composition()